#ifndef __NET_H__
#define __NET_H__



#include <vector>       
#include <list>         
#include <sys/epoll.h>  
#include <sys/socket.h>
#include <pthread.h>    
#include <semaphore.h>  //信号量
#include <atomic>       
#include <map>          
#include <arpa/inet.h>
#include <locker.h>

#define NGX_LISTEN_BACKLOG  	1024    				//已完成连接队列，nginx给511，我们也先按照这个来：不懂这个数字的同学参考第五章第四节
#define NGX_MAX_EVENTS      		512    					//epoll_wait一次最多接收这么多个事件，nginx中缺省是512，我们这里固定给成512就行，没太大必要修改
#define _DATA_BUFSIZE_      			20
#define USE_DATA_LONGTH			8012
#define NET_DATA_LONGTH			4096
#define BUFFER_SIZE							4096				   // I/O请求的缓冲区大小
#define MAX_RCVBUF							102400     		   //<最大接收送缓存

 
typedef  enum  ConnectType
{
	TYPE_Device = 1,
	TYPE_PC = 2,
	TYPE_MobilePhone = 3
}Connect_Type;

struct sClient
{		
	int											nThreadID;
	bool											b_In;
	int											fd;
	CLockMe								m_bClosedLock;
	bool											m_bClosed;
	std::atomic<int>					nSendCount;
	std::atomic<int>					nRecvCount;
	uint64_t								iCurrsequence;
	//和epoll事件有关
	uint32_t								events;
	unsigned char						curStat;															//当前收包的状态
	char										dataHeadInfo[_DATA_BUFSIZE_];		//用于保存收到的数据的包头信息			
	char										*precvbuf;														//接收数据的缓冲区的头指针，对收到不全的包非常有用，看具体应用的代码
	unsigned int							irecvlen;															//要收到多少数据，由这个变量指定，和precvbuf配套使用，看具体应用的代码
	char										*pRecvMemPointer;									//new出来的用于收包的内存首地址，释放用的
	char										*psendMemPointer;
	std::atomic<int>					iThrowsendCount;										//发送消息，如果发送缓冲区满了标志
	char										*psendbuf;													//发送数据的缓冲区的头指针，开始 其实是包头+包体
	unsigned int							isendlen;														//要发送多少数据
	void Init();
	void GetOneToUse();																					//分配出去的时候初始化一些内容
	void PutOneToFree();																				//回收回来的时候做一些事情
	void											*timer;
	char										*pMsgHeader;
	//业务逻辑使用
	Connect_Type						m_SocketType;											//标识是设备连接，还是用户连接
	int											m_nDevId;
	char										m_szUser[64];												//唯一标识，设备guid或用户名
	bool											m_bLogin;
	char										m_szIp[INET_ADDRSTRLEN]; 
};












































#endif